package com.yc.sole.erp.response;

import cn.hutool.core.text.CharSequenceUtil;
import com.yc.sole.common.dto.ProductAttributeDto;
import com.yc.sole.erp.enums.PriorityType;
import com.yc.sole.erp.enums.ProduceSourceType;
import com.yc.sole.erp.enums.ProduceState;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;

/**
 * Resp对象
 *
 * @author yizuomin
 * @date 2024-01-13
 **/
@Data
public class ProduceResp implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * id
     */
    private Long id;
    /**
     * 销售订单表id
     */
    private Long orderId;
    /**
     * 订单编号
     */
    private String orderNo;
    /**
     * 分类id
     */
    private Long categoryId;
    /**
     * 分类名称
     */
    private String categoryName;
    /**
     * 单位
     */
    private String unit;
    /**
     * 优先级 0普通 1加急
     */
    private PriorityType priority;
    /**
     * 生产日期
     */
    private String produceDate;
    /**
     * 生产编号
     */
    private String produceNo;
    /**
     * 产品id
     */
    private Long productId;
    /**
     * 产品名称
     */
    private String productName;
    /**
     * 数量
     */
    private Integer quantity;
    /**
     * 剩余数量
     */
    private Integer remainingQuantity;
    /**
     * 备注
     */
    private String remark;
    /**
     * 客户id
     */
    private Long customerId;
    /**
     * 客户名称
     */
    private String customerName;
    /**
     * 生产状态 0生产中 1暂停 2已完成 3取消
     */
    private ProduceState produceState;
    /**
     * 来源 0销售订单 1库存备货
     */
    private ProduceSourceType sourceType;
    /**
     * 结束生产日期
     */
    private String produceEndDate;
    /**
     * 产品信息
     */
    private ProductResp productInfo;

    /**
     * 产品属性
     */
    private List<ProductAttributeDto> productAttribute;

    public Integer getProduceQuantity() {
        return quantity - (remainingQuantity == null ? 0 : remainingQuantity);
    }

    public Integer getPercentage() {
        Integer produceQuantity = getProduceQuantity();
        BigDecimal produceQuantityDecimal = produceQuantity == 0 ? BigDecimal.ZERO : new BigDecimal(String.valueOf(produceQuantity));
        BigDecimal quantityDecimal = new BigDecimal(String.valueOf(quantity));
        BigDecimal divide = produceQuantityDecimal.divide(quantityDecimal, 2, RoundingMode.HALF_UP);
        return divide.multiply(new BigDecimal("100")).intValue();
    }

    public Long getCustomerId() {
        return customerId == null ? 0 : customerId;
    }

    public String getCustomerName() {
        return CharSequenceUtil.isBlank(customerName) ? "库存" : customerName;
    }
}
